package com.vshop.service.alast;

import com.vshop.config.dto.ResultDataDto;
import com.vshop.entity.alast.homepage.request.RequestUnifiedHomePage;
import com.vshop.entity.alast.multiple.order.request.RequestMultipleOrder;
import com.vshop.entity.alast.multiple.serviceplan.request.RequestMultipleServicePlanPage;
import com.vshop.entity.alast.multiple.verify.request.RequestMultipleVerify;
import com.vshop.entity.alast.single.autorenewal.cancel.request.RequestCancelAutoRenewalRecord;
import com.vshop.entity.alast.single.autorenewal.query.request.RequestQueryAutoRenewalRecord;
import com.vshop.entity.alast.single.autorenewal.reasonforcancel.request.RequestReasonForCancel;
import com.vshop.entity.alast.single.clickgiftbox.request.RequestClickGiftBox;
import com.vshop.entity.alast.single.order.request.RequestSingleOrder;
import com.vshop.entity.alast.single.querydata.request.RequestQueryData;
import com.vshop.entity.alast.single.queryorder.request.RequestSingleQueryOrder;
import com.vshop.entity.alast.single.queryordersbystatus.request.RequestQueryOrdersByStatus;
import com.vshop.entity.alast.single.serviceplan.request.RequestSingleServicePlanPage;
import com.vshop.entity.alast.single.subscribe.sub.request.RequestMailSubscribe;
import com.vshop.entity.alast.single.subscribe.subornot.request.RequestMailSubscribedOrNot;
import com.vshop.entity.alast.single.transactionhistory.request.RequestMyTransactionHistory;
import com.vshop.entity.alast.single.verify.request.RequestSingleVerify;

/**
 * 所有的业务逻辑处理类
 *
 * @author lm
 * @date 2020/6/9 9:59
 */
public interface LogicProcessesService {

    /**
     * 统一入口：默认首页接口请求
     *
     * @param request
     * @return
     */
    ResultDataDto homePage(RequestUnifiedHomePage request);

    /**
     * 统一入口：点击'Multiple'按钮
     *
     * @param request
     * @return
     */
    ResultDataDto multiple(RequestUnifiedHomePage request);

    /**
     * Single模式卡片验证接口：
     * 1，验证卡片的有效性。
     * 2，验证卡片企业归属。
     * 3，验证卡片是否在除“废旧回收期”和“内部库存期”内。
     * 4，验证卡片归属企业的方案
     *
     * @param request
     * @return
     */
    ResultDataDto singleVerify(RequestSingleVerify request);

    /**
     * Single模式：套餐列表页面接口：
     * 1，当前企业卡片可购套餐允许展示re.showStatus='1'；
     * 2，当前企业上架的套餐中存在第1步中的套餐编码p.packageCode = re.packageCode AND p.servicePlanStatus = '2'
     * 3, 当前请求的语言作为一个参数，如果一个企业某个语言的套餐上架好几个也是允许的
     *
     * @param request
     * @return
     */
    ResultDataDto singleServicePlanPage(RequestSingleServicePlanPage request);

    /**
     * Single模式：查询正在使用，未启用的订单
     *
     * @param request
     * @return
     */
    ResultDataDto singleQueryOrder(RequestSingleQueryOrder request);

    /**
     * Single模式：下单接口
     *
     * @param request
     * @return
     */
    ResultDataDto singleOrder(RequestSingleOrder request);

    /**
     * 方案一：查询流量接口
     *
     * @param request
     * @return
     */
    ResultDataDto queryData(RequestQueryData request);

    /**
     * Multiple模式多卡片验证接口
     *
     * @param request
     * @return
     */
    ResultDataDto multipleVerify(RequestMultipleVerify request);

    /**
     * Multiple模式多卡片匹配可够套餐列表接口
     *
     * @param request
     * @return
     */
    ResultDataDto multipleServicePlanPage(RequestMultipleServicePlanPage request);

    /**
     * Multiple模式卡片：下单接口
     *
     * @param request
     * @return
     */
    ResultDataDto multipleOrder(RequestMultipleOrder request);

    /**
     * 是否已经订阅过？
     *
     * @param request
     * @return
     */
    ResultDataDto mailSubscribedOrNot(RequestMailSubscribedOrNot request);

    /**
     * 正式订阅
     *
     * @param request
     * @return
     */
    ResultDataDto mailSubscribe(RequestMailSubscribe request);

    /**
     * Single模式：查询自动续费记录
     *
     * @param request
     * @return
     */
    ResultDataDto queryAutoRenewalRecord(RequestQueryAutoRenewalRecord request);

    /**
     * Single模式：：取消自动续费记录
     *
     * @param request
     * @return
     */
    ResultDataDto cancelAutoRenewalRecord(RequestCancelAutoRenewalRecord request);

    /**
     * Single模式：用户支付完成后:点击礼物盒的记录
     *
     * @param request
     * @return
     */
    ResultDataDto clickGiftBox(RequestClickGiftBox request);

    /**
     * Single模式：取消自动续费的原因
     *
     * @param request
     * @return
     */
    ResultDataDto reasonForCancel(RequestReasonForCancel request);

    /**
     * Single模式：：用户"My Order" 获取卡片所有的购买交易记录
     *
     * @param request
     * @return
     */
    ResultDataDto myTransactionHistory(RequestMyTransactionHistory request);

    /**
     * Single模式：按不同状态（2-正在使用；1-未生效；3-已失效）查询订单
     *
     * @param request
     * @return
     */
    ResultDataDto queryOrdersByStatus(RequestQueryOrdersByStatus request);
}
